#include "cliente.h"

Cliente::Cliente(long int rodada) {
  W1i = -1.0;
  W1f = -1.0;
  W2i = -1.0;
  W2f = -1.0;
  X1i = -1.0;
  X1f = -1.0;
  X2i = -1.0;
  X2f = -1.0;
  Nq1 = 0;
  Nq2 = 0;
  N1 = 0;
  N2 = 0;
  v_W2f.clear();
  v_W2i.clear();
  v_X2f.clear();
  v_X2i.clear();
  c_rodada = rodada;
};

Cliente::~Cliente() {
  v_W2i.clear();
  v_W2f.clear();
  v_X2i.clear();
  v_X2f.clear();
};


void Cliente::coletaDadosFila(int tamanhoFila1, int tamanhoFila2, int clienteServidor){
  Nq1 = tamanhoFila1;
  Nq2 = tamanhoFila2;

  if(clienteServidor == 0){
    N1 = Nq1;
    N2 = Nq2;
  }
  else if(clienteServidor == 1){
    N1 = Nq1 + 1;
    N2 = Nq2;
  }
  else if(clienteServidor == 2){
    N1 = Nq1;
    N2 = Nq2 + 1;
  }
}

void Cliente::entraFila1(double tempo) {
  W1i = tempo;
};

void Cliente::entraServidorFila1(double tempo) {
  W1f = tempo;
  X1i = tempo;
};

void Cliente::entraFila2(double tempo) {
  X1f = tempo;
  W2i = tempo;
};

void Cliente::entraServidorFila2(double tempo) {
  W2f = tempo;
  X2i = tempo;
};

void Cliente::retornaFila2(double tempo) {
  v_W2i.push_back(W2i);
  v_W2f.push_back(W2f);
  v_X2i.push_back(X2i);
  v_X2f.push_back(tempo);

  W2i = tempo;    ///estou fingindo que o cliente acabou de chegar na fila 2
  W2f = -1.0;
  X2i = -1.0;
};

void Cliente::saiSistema(double tempo) {
  X2f = tempo;
};

int Cliente::pertenceFila(){
  if (X1i >= 0 && X1f < 0)
    return 1;
  else
    return 2;
}

int Cliente::rodada(){
  return c_rodada;
}

double Cliente::calculaW1() {
  return (W1f - W1i);
}

double Cliente::calculaW2() {
  double total = 0.0;
  for(unsigned int i = 0; i < v_W2i.size(); i++){
    total += v_W2f[i] - v_W2i[i];
  }
  total += W2f - W2i;
  return total;
}

double Cliente::calculaX1(){
  return (X1f - X1i);
}

double Cliente::calculaX2(){
  double total = 0.0;
  for(unsigned int i = 0; i < v_X2i.size(); i++){
    total += v_X2f[i] - v_X2i[i];
  }
  total += X2f - X2i;
  return total;
}

double Cliente::calculaT1(){
  return (calculaX1() + calculaW1());
}

double Cliente::calculaT2(){
  return (calculaX2() + calculaW2());
}

int Cliente::calculaN1(){
  return N1;
}

int Cliente::calculaN2(){
  return N2;
}

int Cliente::calculaNq1(){
  return Nq1;
}

int Cliente::calculaNq2(){
  return Nq2;
}
